#include "seq_list.h"

int main(int argc, const char *argv[]){
    
    list_t *my_list = NULL;
    //my_list = create_list_1();
    create_list_2(&my_list);
    printf("my_list = %p\n", my_list); // 非NULL

    // 测试尾插
    insert_list_by_tail(my_list, 10);
    insert_list_by_tail(my_list, 20);
    insert_list_by_tail(my_list, 30);
    print_list(my_list); // 10 20 30
    insert_list_by_tail(my_list, 40);
    print_list(my_list); // 10 20 30 40

    // 测试任意位置插
    insert_list_by_position(my_list, 5, 50); // 报错 位置不合理
    insert_list_by_position(my_list, 4, 60);
    insert_list_by_position(my_list, 1, 70);
    print_list(my_list); // 10 70 20 30 40 60

    // 测试尾删
    delete_list_by_tail(my_list);
    delete_list_by_tail(my_list);
    print_list(my_list); // 10 70 20 30

    // 测试任意位置删除
    delete_list_by_position(my_list, 4); // 报错 位置不合理
    delete_list_by_position(my_list, 3); 
    delete_list_by_position(my_list, 1);
    print_list(my_list); // 10 20

    insert_list_by_tail(my_list, 30);
    insert_list_by_tail(my_list, 40);
    print_list(my_list); // 10 20 30 40

    // 测试修改
    modify_list_by_position(my_list, 4, 100); //  报错 位置不合理
    modify_list_by_position(my_list, 3, 200);
    modify_list_by_position(my_list, 1, 300);
    print_list(my_list); // 10 300 30 200

    // 测试查找
    int value = 0;
    int ret = 0;
    ret = search_list_by_position(my_list, 4, &value); //  报错 位置不合理
    printf("ret = %d   value = %d\n", ret, value); // -1 0
    ret = search_list_by_position(my_list, 3, &value);
    printf("ret = %d   value = %d\n", ret, value); // 0 200
    ret = search_list_by_position(my_list, 1, &value);
    printf("ret = %d   value = %d\n", ret, value); // 0 300

    // 测试清空
    clean_list(my_list);
    print_list(my_list); // 没有元素了

    // 测试销毁
    destroy_list(&my_list);
    printf("my_list = %p\n", my_list); // NULL

    // 测试排序
    create_list_2(&my_list);
    insert_list_by_tail(my_list, 30);
    insert_list_by_tail(my_list, 20);
    insert_list_by_tail(my_list, 50);
    insert_list_by_tail(my_list, 10);
    insert_list_by_tail(my_list, 40);
    print_list(my_list); // 30 20 50 10 40
    sort_list(my_list, 0); // 升序排序
    print_list(my_list); // 10 20 30 40 50
    sort_list(my_list, 1); // 降序排序
    print_list(my_list); // 50 40 30 20 10

    // 测试剔重
    insert_list_by_position(my_list, 2, 50);
    insert_list_by_position(my_list, 3, 50);
    insert_list_by_tail(my_list, 50);
    insert_list_by_position(my_list, 5, 40);
    print_list(my_list); // 50 40 50 50 30 40 20 10 50
    tichong_list(my_list);
    print_list(my_list); // 50 40 30 20 10

    // 销毁
    destroy_list(&my_list);
    printf("my_list = %p\n", my_list); // NULL

    return 0;
}